其他
Redis 的这些拓展方案
作者 | Vt
来源 | juejin.im/post/5eb0e724e51d454d89440da2
上一篇:经验篇:汇总一下Intellij IDEA常用的牛逼插件
前言
正文
分区
概述
所有机器内存总和有256G, 而客户端正好也需要一个大内存的存储空间。
使用方式
客户端处理
和传统的数据库分库分表一样,可以从key入手,先进行计算,找到对应数据存储的实例在进行操作。
范围角度,比如orderId:1~orderId:1000放入实例1,orderId:1001~orderId:2000放入实例2...
哈希计算,就像我们的hashmap一样,用hash函数加上位运算或者取模,高级玩法还有一致性Hash等操作,找到对应的实例进行操作使用代理中间件
我们可以开发独立的代理中间件,屏蔽掉处理数据分片的逻辑,独立运行。
当然也有他人已经造好的轮子,Redis也有优秀的代理中间件,譬如Twemproxy,或者codis,可以结合场景选择是否使用。
缺点
无缘多key操作,key都不一定在一个实例上,那么多key操作或者多key事务自然是不支持。 维护成本,由于每个实例在物理和逻辑上,都属于单独的一个节点,缺乏统一管理。 灵活性有限,范围分片还好,比如hash+MOD这种方式,如果想动态调整Redis实例的数量,就要考虑大量数据迁移,这就非常麻烦了。
主从
概述数据迁移
使用方式
作为主节点的Redis实例,并不要求配置任何参数,只需要正常启动 作为从节点的实例,使用配置文件或命令方式REPLICAOF 主节点Host 主节点port即可完成主从配置
缺点
slave节点都是只读的,如果写流量大的场景,就有些力不从心了。
那我把slave节点只读关掉不就行了?当然不行,数据复制是由主到从,从节点独有数据同步不到主节点,数据就不一致了。故障转移不友好,主节点挂掉后,写处理就无处安放,需要手工的设定新的主节点,如使用REPLICAOF no one(谁大腿我都不抱了) 晋升为主节点,再梳理其他slave节点的新主配置,相对来说比较麻烦。
哨兵
概述
使用方式
sentinel monitor <主节点别名> <主节点host> <主节点端口> <票数>
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
更多
故障转移期间短暂的不可用,但其实官网的例子也给出了parallel-syncs参数来指定并行的同步实例数量,以免全部实例都在同步出现整体不可用的情况,相对来说要比手工的故障转移更加方便。 分区逻辑需要自定义处理,虽然解决了主从下的高可用问题,但是Sentinel并没有提供分区解决方案,还需开发者考虑如何建设。 既然是还是主从,如果异常的写流量搞垮了主节点,那么自动的“故障转移”会不会变成自动“灾难传递”,即slave提升为Master之后挂掉,又进行提升又被挂掉。
不过最后这点也是笔者猜测,并没有听说过出现这种案例,可不必深究。
集群
概述
使用方式
cluster-enabled yes
cluster-config-file "redis-node.conf"
开启集群 指定集群配置文件
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
redis-cli --cluster check 127.0.0.1:7001
更多
虽然是对分区良好支持,但也有一些分区的老问题,譬如:如果不在同一个“槽”的数据,是没法使用类似mset的多键操作。
在select命令页有提到, 集群模式下只能使用一个库,虽然平时一般也是这么用的,但是要了解一下。
运维上也要谨慎,俗话说得好,“使用越简单底层越复杂”,启动搭建是很方便,使用时面对带宽消耗,数据倾斜等等具体问题时,还需人工介入,或者研究合适的配置参数。
结尾
趣谈
-END-
架构师交流群
「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群
扫描添加好友邀你进架构师群,加我时注明【姓名+公司+职位】
版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。
猜你还想看
实战篇:RabbitMQ 消费端限流、TTL、死信队列
经验篇:一次kafka卡顿事故排查过程!
实战篇:5分钟实现SpringBoot整合Dubbo构建分布式服务
GitHub重大更新:在线开发上线,是时候卸载IDE了!
长按识别图片二维码关注,订阅更多精彩
顶级架构师,企业架构、系统架构、网站架构、大规模分布式架构、高可用架构等架构讨论,以及结合互联网技术的架构调整。欢迎有想法、乐于分享的架构师交流学习